import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;


abstract class Produit {

	protected int id;
	protected String nom;
	protected float prix;
	protected TypeProduit type_produit;

	public Produit(int id, String nom, float prix, boolean est_virtuel) {
		this.id=id;
		this.nom=nom;
		this.prix=prix;
		this.type_produit=type_produit;
	}

	public String getNom() {
		return nom;
	}

	public float getPrix() {
		return prix;
	}

	public int getId() {
		return id;
	}

	public boolean estVirtuel() {
		return this.type_produit==TypeProduit.SERVICE;
	}

    public static Set<Produit> getByNom(String nom_produit) throws SQLException {
     	
    	Set<Produit> produits = new HashSet<Produit>();
     	
		String sql = "SELECT * FROM produit where nom LIKE ?"; 
		
		PreparedStatement prepare = MaConnexion.getInstance().prepareStatement(sql);
		prepare.setString(1,nom_produit);
		ResultSet  rs = null;
		rs = prepare.executeQuery();
		if(rs.first()){
			while (rs.next()) {
				int id = rs.getInt("id");
				String nom = rs.getString("nom");
				Float  prix = rs.getFloat("prix");
				String type_produit= rs.getString("type_produit");
				if(type_produit.equals(TypeProduit.SERVICE)){
					Service service = new Service(id,nom,prix);
					produits.add(service);
				} else {
					Article article = new Article(id,nom,prix);
					produits.add(article);
				}
				

			}
		}
		return produits;
    }
	
	public void insert() throws SQLException{
		String sql = "INSERT into produit (id,nom,prix,type_produit) VALUES (?,?,?,?)"; 
		PreparedStatement prepare = MaConnexion.getInstance().prepareStatement(sql);
		prepare.setInt(1,this.id);
		prepare.setString(2,this.nom);
		prepare.setFloat(3,prix);
		prepare.setBoolean(4,this.est_virtuel);
		prepare.executeUpdate();		
	}
	
	public void delete() throws SQLException{
		String sql = "DELETE from produit where id=?"; 
		PreparedStatement prepare = MaConnexion.getInstance().prepareStatement(sql);
		prepare.setInt(1,this.id);
		prepare.executeUpdate();	
	}
	
}